package leetcode.problems;

import org.junit.Test;

import java.util.Arrays;

/**
 * Created by gmwang on 2018/7/25
 */
public class _0726FlippinganImage {
    /**
     * Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resulting image.
     * To flip an image horizontally means that each row of the image is reversed.  For example, flipping [1, 1, 0] horizontally results in [0, 1, 1].
     * To invert an image means that each 0 is replaced by 1, and each 1 is replaced by 0. For example, inverting [0, 1, 1] results in [1, 0, 0].
     * 给定二进制矩阵A，我们想要水平翻转图像，然后翻转它，并返回结果图像。
     * 水平翻转图像意味着图像的每一行都是相反的。例如，[1, 1, 0] 水平翻转会  导致  [0, 1, 1]。
     * 翻转图像意味着每个图像都0被替换1，并且每个图像都1被替换0。例如，反转  [0, 1, 1] 结果  [1, 0, 0]。
     * Example 1:
     * <p>
     * Input: [[1,1,0],[1,0,1],[0,0,0]]
     * Output: [[1,0,0],[0,1,0],[1,1,1]]
     * Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
     * Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]
     * Example 2:
     * <p>
     * Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
     * Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
     * Explanation: First reverse each row: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
     * Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
     * Notes:
     * <p>
     * 1 <= A.length = A[0].length <= 20
     * 0 <= A[i][j] <= 1
     */
    public int[][] flipAndInvertImage(int[][] A) {
        int temp;
            //水平翻转
            for (int i = 0; i < A.length; i++) {
                for (int j = 0; j < (A[i].length %2 ==0?A[i].length/2:A[i].length/2 + 1); j++) {
                    temp = A[i][j]==0?1:0;
                    A[i][j] = A[i][A[i].length - j - 1]==0?1:0;
                    A[i][A[i].length - j - 1] = temp;
                }
            }
        return A;
    }

    @Test
    public void test() {
//        int[][] ints = {{1, 1, 0}, {1, 0, 1}, {0, 0, 0}};
        int[][] ints = {{1,1,0,0},{1,0,0,1},{0,1,1,1},{1,0,1,0}};
        int[][] res = flipAndInvertImage(ints);
        for (int[] input1 : res) {
            System.out.println(Arrays.toString(input1));
        }
    }
}
